package com.silence.gmall.component;

import java.lang.reflect.Type;
import java.util.Optional;
import java.util.concurrent.TimeUnit;

/**
 * @Author silence
 * @Date 2025-09-30 14:07
 * @Email 792245022@qq.com
 * @Version 1.0
 * @Description 缓存操作组件
 */
public interface CatchOpsComponent {

    /**
     * 获取缓存数据
     *
     * @param key  缓存key
     * @param type 返回值类型
     * @param <T>  返回值类型
     * @return 缓存数据
     */
    <T> Optional<T> getCatchData(String key, Type type);

    /**
     * 获取缓存数据
     *
     * @param key   缓存key
     * @param clazz 返回值类型
     * @param <T>   返回值类型
     * @return 缓存数据
     */
    <T> Optional<T> getCatchData(String key, Class<T> clazz);

    /**
     * 保存缓存数据
     *
     * @param key     缓存key
     * @param data    缓存数据
     * @param timeout 缓存过期时间
     * @param unit    时间单位
     */
    void saveData(String key, Object data, long timeout, TimeUnit unit);

}
